class Wstring {

  /**
   * @param { String | Number } date // 时间 { milliseconds | dateString }
   */
  constructor(date) {
    this.strData = date.toString();
  }

  /*
   *  1、字符串常用判断方法
   */
  // 验证邮箱
  isEmail() {
    return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(this.strData);
  }
  // 验证手机号码
  isMobile () {
    return /^1[0-9]{10}$/.test(this.strData);
  }
  // 验证域名
  isURL() {
    return /^http[s]?:\/\/.*/.test(this.strData);
  }
  // 验证是否是英文
  isEnglish() {
    return /^[a-zA-Z]+$/.test(this.strData);
  }
  // 验证是否是中文
  isChinese() {
    return /^[\\u4E00-\\u9FA5]+$/.test(this.strData);
  }
  // 是否是小写
  isLower() {
    return /^[a-z]+$/.test(this.strData);
  }
  // 是否是大写
  isUpper() {
    return /^[A-Z]+$/.test(this.strData);
  }

  // 2、字符串常用处理方法

  // 删除所有空格
  delSpaceAll() {
    return this.strData.replace(/\s+/g, '');
  }
  // 删除收尾空格
  delSpaceStartEnd() {
    return this.strData.replace(/(^\s*)|(\s*$)/g, '');
  }
  // 删除前空格
  delSpaseStart() {
    return this.strData.replace(/(^\s*)/g, '');
  }
  // 删除尾空格
  delSpaseEnd() {
    return this.strData.replace(/(\s*$)/g, '');
  }
  // 首字母大写
  initialToUpper() {
    const strArr = this.strData.split(' ');
    const newArr = [];

    strArr.map(item => {
      const str = item.replace(/\b\w+\b/g,  (word) => {
        return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
      });

      newArr.push(str);
    });

    return newArr.join(' ');
  }

  /**
   * @desc 替换字符串全局
   * @param {*} oldStr 老字符串
   * @param {*} newStr 新字符串
   */
  replaceAll(oldStr, newStr) {
    return this.strData.replace(new RegExp(oldStr, 'g'), newStr);
  }

  /**
   * @desc 脱敏影藏中间部分
   * @param { Number } startLength 从第几位开始隐藏
   * @param { Number } hideSize 隐藏好多位
   * @param { String } symbol 隐藏替换符号
   */
  setHide(startLength = 3, hideSize = 4, symbol = '*') {
    if (this.strData) {
      let newSymbol = '';

      // 生成隐藏符号
      for (let i = 0; i < hideSize; i++) {
        newSymbol += symbol;
      }

      return this.strData.substring(0, startLength) + newSymbol + this.strData.substring(startLength + hideSize);
    } else {
      return '';
    }
  }
  // 3、从字符串中获取数据

  // 获取URL地址参数
  getUrlParams() {
    const params = {};
    const urls = this.strData.split('?'); // console.log('1_分割url:', urls)
    const arr = urls[1].split('&'); // console.log('2_分割urls[1]:', arr)

    for (let i = 0, l = arr.length; i < l; i++) {
      const a = arr[i].split('='); // console.log('3_遍历 arr 并分割后赋值给a:', a[0], a[1])

      params[a[0]] = a[1]; // console.log('4_a给params对象赋值:', params)
    }

    return params;
  }
  // 获取URL地址域名
  getUrlDoman() {
    let domain = this.strData.split('/');

    if (domain[2]) {
      domain = domain[2];
    } else {
      domain = '';
    }

    return domain;
  }
  // 获取文件扩展名
  getFileType() {
    const fileName = this.strData.split('.');

    return fileName[fileName.length - 1];
  }
}

module.exports = Wstring;
